package com.henu.acmrating.utils;

import cn.hutool.core.codec.Base64;
import cn.hutool.core.io.resource.ResourceUtil;
import cn.hutool.core.util.CharsetUtil;
import cn.hutool.crypto.SecureUtil;
import cn.hutool.crypto.symmetric.AES;
import cn.hutool.extra.mail.MailUtil;

/**
 * @Author XiaolongLi
 * @Description https://www.hutool.cn/ 封装工具
 * @Date 2020/7/25 10:13
 */
public class HuToolUtils {

    private static final String Base64_Key = "xHiVEPCKJB9w4HOcjpYa1A==";

    /**
     * 激活邮箱
     *
     * @param toMail   收送人
     * @param userName 用户名
     * @param url      激活地址
     */
    public static void activate(String toMail, String userName, String url) {
        String content = ResourceUtil.readUtf8Str("static/activate.html");
        content = content.replace("userName", userName);
        content = content.replace("active-url", url);
        MailUtil.send(toMail, "【缘来是你】激活邮箱", content, true);
    }

    /**
     * 注册账号，验证邮箱
     *
     * @param toMail 收件人
     * @param code   验证码
     */
    public static void register(String toMail, String code) {
        String content = ResourceUtil.readUtf8Str("static/register.html");
        content = content.replace("code", code);
        MailUtil.send(toMail, "【缘来是你】激活邮箱", content, true);
    }

    /**
     * 发送验证码
     *
     * @param toMail   收送人
     * @param userName 用户名
     * @param modify   修改 (密码 或 邮箱)
     * @param code     验证码
     */
    public static void verifyCode(String toMail, String userName, String modify, String code) {
        String content = ResourceUtil.readUtf8Str("static/modify.html");
        content = content.replace("userName", userName);
        content = content.replace("modify", modify);
        content = content.replace("code", code);
        MailUtil.send(toMail, "【ACM-RATING】修改邮箱", content, true);
    }

    /**
     * 加密字符串
     *
     * @param content 加密的内容
     * @return 返回加密密文
     */
    public static String encrypt(String content) {
        // 使用Base64 解密密钥
        byte[] key = Base64.decode(Base64_Key);
        // 构建
        AES aes = SecureUtil.aes(key);

        // 加密为16进制表示
        return aes.encryptHex(content);
    }

    /**
     * 解密
     * @param encryptHex 密文16进制
     * @return 原文
     */
    public static String decrypt(String encryptHex) {
        // 使用Base64 解密密钥
        byte[] key = Base64.decode(Base64_Key);
        // 构建
        AES aes = SecureUtil.aes(key);
        // 解密
        return aes.decryptStr(encryptHex, CharsetUtil.CHARSET_UTF_8);
    }

    public static void main(String[] args) {
//        String encrypt = encrypt("1610252248");
//        String decrypt = decrypt(encrypt);
//        System.out.println(encrypt + "\n" + decrypt);
        MailUtil.send("1392728166@qq.com", "测试邮件1", "1邮件来自Zyred问候沙雕的邮件, 晚上好！", false);
    }
}
